package collection;

import org.junit.Test;

import java.util.Comparator;
import java.util.TreeSet;


/**
 * Created by :Infaraway
 * DATE : 2017/3/26
 * Time : 14:21
 * Funtion :
 */
public class TreeSetTest {


    /**
     * 自然排序情况
     *
     * 默认情况下TreeSet要求集合中的元素必须实现Comparable接口
     * Comparable接口中只有一个方法：
     * public int compareTo(T o)
     *     如果返回0 代表两个元素相等
     *     如果返回正数，代表当前元素大
     *     如果返回负数，代表当前元素小
     * TreeSet 会调用每个元素的compareTo()方法去和集合中的每个已经有的元素比较，进而决定当前元素在集合中的位置
     *
     */
    @Test
    public void testTreeSet(){

        TreeSet treeSet = new TreeSet();
        treeSet.add(new PersonCompare("AAA",16));
        treeSet.add(new PersonCompare("BBB",13));
        treeSet.add(new PersonCompare("CCC",11));
        treeSet.add(new PersonCompare("DDD",15));

        for (Object o : treeSet) {
            System.out.println(o.toString());
        }
    }


    /**
     * 定制排序
     *
     */
    @Test
    public void testTreeSet2(){
        //创建comparator接口的实现类对象
        Comparator comparator = new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Person && o2 instanceof Person){
                    Person p1 = (Person)o1;
                    Person p2 = (Person)o2;
                    return p1.getAge() - p2.getAge();
                }
                throw new ClassCastException("类型转换异常");
            }
        };

        //创建TreeSet对象，传入Comparator接口的实现类对象
        TreeSet treeSet = new TreeSet(comparator);
        treeSet.add(new Person("AAA",16));
        treeSet.add(new Person("BBB",13));
        treeSet.add(new Person("CCC",11));
        treeSet.add(new Person("DDD",15));

        for (Object person : treeSet) {
            System.out.println(person.toString());
        }
    }
}
